package br.ufc.persis.controller;

import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

import br.ufc.persis.dao.FuncionarioDAO;
import br.ufc.persis.dao.impl.FuncionarioJPADAO;
import br.ufc.persis.model.Departamento;
import br.ufc.persis.model.Funcionario;
import br.ufc.persis.model.Manutencao;
import br.ufc.persis.model.Pesquisador;
import br.ufc.persis.model.Secretario;
import br.ufc.persis.view.ViewFuncionario;

public class FuncionarioController {

	private static Scanner sc = new Scanner(System.in);

	public static void processar(int opc, Departamento departamento) {
		if(opc == ViewFuncionario.NOVO){
			cadastrarFuncionario(departamento);
		}else if(opc == ViewFuncionario.LISTAR){
			mostrarFuncionarios(departamento);
		}else if(opc == ViewFuncionario.EXCLUIR){
			excluirFuncionarios();
		}
	}

	private static void excluirFuncionarios() {
		FuncionarioDAO dao = new FuncionarioJPADAO();
		System.out.println("Digite o código do funcionario \n");
		long id = Long.parseLong(sc.nextLine());
		Funcionario funcionario = dao.find(id);
		System.out.println("Deseja realmente excluir o funcionario "+funcionario.getNome()+" ? (1 - s/2 - n)");
		int opc = Integer.parseInt(sc.nextLine());
		if(opc == 1){
			dao.beginTransaction();
			dao.delete(funcionario);
			dao.commit();
			dao.close();
		}else{
			return;
		}
	}

	private static void mostrarFuncionarios(Departamento departamento) {
		Collection<Funcionario> funcionarios = departamento.getFuncionarios();
		for (Funcionario funcionario : funcionarios) {
			System.out.println(funcionario);
			System.out.println("----------");
		}
	}

	private static void cadastrarFuncionario(Departamento departamento) {
		FuncionarioDAO dao = new FuncionarioJPADAO();
		System.out.println("Digite o nome:");
		String nome = sc.nextLine();
		System.out.println("Digite o sexo (m/f)");
		String sexoS = sc.nextLine();
		char sexo = sexoS.charAt(0);
		System.out.println("Digite o endereço:");
		String endereco = sc.nextLine();
		System.out.println("Digite a data de nascimento: (dd/mm/aaaa)");
		String[] niver = sc.nextLine().split("/");
		Calendar date = Calendar.getInstance();
		date.set(Calendar.DAY_OF_MONTH, Integer.parseInt(niver[0]));
		date.set(Calendar.MONTH, Integer.parseInt(niver[1]) - 1);
		date.set(Calendar.YEAR, Integer.parseInt(niver[2]));
		Date nascimento = date.getTime();
		System.out.println("Digite o salario");
		double salario = Double.parseDouble(sc.nextLine());
		System.out.println("Selecione o tipo de funcionarios:");
		System.out.println("1 - Pesquisador");
		System.out.println("2 - Secretario");
		System.out.println("3 - Manutenção");
		int opc = Integer.parseInt(sc.nextLine());
		switch (opc) {
		case 1:
			Pesquisador pesquisador = new Pesquisador();
			pesquisador.setNome(nome);
			pesquisador.setEndereco(endereco);
			pesquisador.setSexo(sexo);
			pesquisador.setNascimento(nascimento);
			pesquisador.setSalario(salario);
			pesquisador.setDepartamento(departamento);
			System.out.println("Digite sua área de atuação:");
			String area = sc.nextLine(); 
			pesquisador.setArea(area);
			dao.beginTransaction();
			dao.save(pesquisador);
			dao.commit();
			dao.close();

			break;
		case 2:
			Secretario secretario = new Secretario();
			secretario.setNome(nome);
			secretario.setEndereco(endereco);
			secretario.setSexo(sexo);
			secretario.setNascimento(nascimento);
			secretario.setSalario(salario);
			secretario.setDepartamento(departamento);
			System.out.println("Digite a escolaridade:");
			String escolaridade = sc.nextLine(); 
			secretario.setEscolaridade(escolaridade);
			dao.beginTransaction();
			dao.save(secretario);
			dao.commit();
			dao.close();
			break;
		case 3:
			Manutencao manutencao = new Manutencao();
			manutencao.setNome(nome);
			manutencao.setEndereco(endereco);
			manutencao.setSexo(sexo);
			manutencao.setNascimento(nascimento);
			manutencao.setSalario(salario);
			manutencao.setDepartamento(departamento);
			System.out.println("Digite o código do seu gerente");
			long idGerente = Long.parseLong(sc.nextLine());
			if(idGerente != 0L){
				Manutencao gerente = (Manutencao) dao.find(idGerente);
				manutencao.setGerente(gerente);
			}
			dao.beginTransaction();
			dao.save(manutencao);
			dao.commit();
			dao.close();
			break;
		}

	}

}
